home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-05-29 | 4.3 KB | 137 lines | [TEXT/gsVR] |
- % Copyright (C) 1997 Aladdin Enterprises. All rights reserved.
- %
- % This file is part of Aladdin Ghostscript.
- %
- % Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author
- % or distributor accepts any responsibility for the consequences of using it,
- % or for whether it serves any particular purpose or works at all, unless he
- % or she says so in writing. Refer to the Aladdin Ghostscript Free Public
- % License (the "License") for full details.
- %
- % Every copy of Aladdin Ghostscript must include a copy of the License,
- % normally in a plain ASCII text file named PUBLIC. The License grants you
- % the right to copy, modify and redistribute Aladdin Ghostscript, but only
- % under certain conditions described in the License. Among other things, the
- % License requires that the copyright notice and this notice be preserved on
- % all copies.
-
- % Initialization file for most of the Display PostScript functions
- % that are also included in Level 2.
-
- level2dict begin
-
- % ------ Virtual memory ------ %
-
- /currentshared /.currentglobal load def
- /scheck /.gcheck load def
- %****** FOLLOWING IS WRONG ******
- /shareddict currentdict /globaldict .knownget not { 20 dict } if def
-
- % Global and LocalFontDirectory must remain in systemdict
- % even if we temporarily exit Level 2 mode.
-
- end % level2dict
- systemdict begin
-
- /SharedFontDirectory .FontDirectory .gcheck
- { .currentglobal false .setglobal
- /LocalFontDirectory .FontDirectory dup maxlength dict copy def
- .setglobal .FontDirectory
- }
- { /LocalFontDirectory .FontDirectory def
- 50 dict
- }
- ifelse def
-
- end % systemdict
- level2dict begin
-
- % setshared must rebind FontDirectory to the appropriate one of
- % Local or SharedFontDirectory.
-
- /.setglobal % <bool> .setglobal -
- { dup .setglobal
- //systemdict /FontDirectory .currentglobal
- { //SharedFontDirectory }
- { //systemdict /LocalFontDirectory get } % can't embed ref to local VM
- ifelse .forceput pop
- } .bind odef % must bind .forceput and .setglobal
- % even if NOBIND in effect
- /setshared /.setglobal load def
- .currentglobal setshared
-
- % ------ Fonts ------ %
-
- /selectfont % <fontname> <size> selectfont -
- { 1 index findfont
- 1 index dup type /arraytype eq { makefont } { scalefont } ifelse
- setfont pop pop
- } odef
- % undefinefont has to take local/global VM into account.
- /undefinefont % <fontname> undefinefont -
- { .FontDirectory 1 index .undef
- .currentglobal
- { % Current mode is global; delete from local directory too.
- //systemdict /LocalFontDirectory .knownget
- { 1 index .undef }
- if
- }
- { % Current mode is local; if there was a shadowed global
- % definition, copy it into the local directory.
- //systemdict /SharedFontDirectory .knownget
- { 1 index .knownget
- { .FontDirectory 2 index 3 -1 roll put }
- if
- }
- if
- }
- ifelse pop
- } odef
-
- % If we load a font into global VM within an inner save, the restore
- % will delete it from FontDirectory but not from SharedFontDirectory.
- % We have to handle this by making restore copy missing entries from
- % SharedFontDirectory to FontDirectory. Since this could slow down restore
- % considerably, we define a new operator .dictcopynew for this purpose.
- % Furthermore, if FAKEFONTS is in effect, we want global real fonts to
- % override fake local ones. We handle this by brute force.
- /restore % <save> restore -
- { dup //restore % bind even if NOBIND
- //systemdict /LocalFontDirectory get
- FAKEFONTS
- { mark
- % We want to delete a fake font from the local directory
- % iff the global directory now has no definition for it,
- % or a non-fake definition.
- 1 index dup
- { % Stack: lfd mark lfd key ... lfd key value
- length 1 gt
- { % This is a real local definition; don't do anything.
- pop
- }
- { % This is a fake local definition, check for global.
- //SharedFontDirectory 1 index .knownget
- { % A global definition exists, check for fake.
- length 1 eq { pop } { 1 index } ifelse
- }
- { % No global definition, delete the local one.
- 1 index
- }
- ifelse
- }
- ifelse
- } forall
- pop counttomark 2 idiv { .undef } repeat pop
- }
- if
- //SharedFontDirectory exch .dictcopynew pop
- .currentglobal .setglobal % Rebind FontDirectory according to current VM.
- pop
- } bind odef
-
- % ------ Miscellaneous ------ %
-
- /undef /.undef load def
-
- end % level2dict
-